namespace Microsoft.VisualStudio.EnterpriseTools.OperationDesigner
{
    using System;
    using System.ComponentModel;

    public abstract class WrappedPropertyDescriptor : PropertyDescriptor
    {
        private PropertyDescriptor wrappedProperty;

        protected WrappedPropertyDescriptor(PropertyDescriptor wrappedProperty) : base(wrappedProperty)
        {
            this.wrappedProperty = wrappedProperty;
        }

        public override bool CanResetValue(object component)
        {
            return this.wrappedProperty.CanResetValue(component);
        }

        public override object GetValue(object component)
        {
            return this.wrappedProperty.GetValue(component);
        }

        public override void ResetValue(object component)
        {
            this.wrappedProperty.ResetValue(component);
        }

        public override void SetValue(object component, object value)
        {
            this.wrappedProperty.SetValue(component, value);
        }

        public override bool ShouldSerializeValue(object component)
        {
            return this.wrappedProperty.ShouldSerializeValue(component);
        }

        public override string Category
        {
            get
            {
                return this.wrappedProperty.Category;
            }
        }

        public override Type ComponentType
        {
            get
            {
                return this.wrappedProperty.ComponentType;
            }
        }

        public override string Description
        {
            get
            {
                return this.wrappedProperty.Description;
            }
        }

        public override string DisplayName
        {
            get
            {
                return this.wrappedProperty.DisplayName;
            }
        }

        public override bool IsReadOnly
        {
            get
            {
                return this.wrappedProperty.IsReadOnly;
            }
        }

        public override Type PropertyType
        {
            get
            {
                return this.wrappedProperty.PropertyType;
            }
        }
    }
}

